# logger.py
import logging
import logging.handlers
from pathlib import Path
import sys
import os


def setup_logger(name="AppLogger", log_file=None, level=logging.INFO):
    """
    设置带文件滚动的日志记录器
    """
    # 确定日志目录（兼容打包环境）
    if getattr(sys, 'frozen', False):
        # 打包后：日志放在 exe 同目录下的 logs 文件夹
        log_dir = Path(sys.executable).parent / "logs"
    else:
        # 开发环境：放在项目目录下的 logs 文件夹
        log_dir = Path(__file__).parent / "logs"

    log_dir.mkdir(exist_ok=True)

    if log_file is None:
        log_file = log_dir / "app.log"
    else:
        log_file = log_dir / log_file

    # 创建 logger
    logger = logging.getLogger(name)
    logger.setLevel(level)

    # 避免重复添加 handler（重要！）
    if logger.hasHandlers():
        return logger

    # 文件处理器：每天一个文件，保留7天
    file_handler = logging.handlers.TimedRotatingFileHandler(
        log_file,
        when="midnight",
        interval=1,
        backupCount=7,
        encoding="utf-8"
    )
    file_handler.suffix = "%Y-%m-%d.log"  # 日志文件后缀：app.log.2025-04-05.log

    # 控制台输出（仅开发环境）
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.DEBUG)

    # 格式化
    formatter = logging.Formatter(
        fmt='[%(asctime)s] %(levelname)-8s [%(name)s:%(funcName)s:%(lineno)d] %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )
    file_handler.setFormatter(formatter)
    console_handler.setFormatter(formatter)

    logger.addHandler(file_handler)
    if not getattr(sys, 'frozen', False):
        logger.addHandler(console_handler)  # 打包后不输出到控制台

    return logger


# 全局 logger 实例
app_logger = setup_logger()